<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /*
            给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2，另有两个整数 m 和 n ，
            分别表示 nums1 和 nums2 中的元素数目。
            请你合并nums2到nums1中使合并后的数组同样按非递减顺序排列。
            注意：最终，合并后数组不应由函数返回，而是存储在数组 nums1 中。
            为了应对这种情况，nums1 的初始长度为 m + n，其中前 m 个元素表示应合并的元素，
            后 n 个元素为 0 ，应忽略。nums2 的长度为 n 。
        */

        // 第一种方法 直接合并然后排序
        var merge = function (nums1, m, nums2, n) {
            for (let i = 0; i < n; i++) {
                nums1[m + i] = nums2[i];
            }
            for (let i = 0; i < nums1.length; i++) {
                for (let j = i; j < nums1.length; j++) {
                    if (nums1[i] >= nums1[j]) {
                        let temp = nums1[i];
                        nums1[i] = nums1[j];
                        nums1[j] = temp;
                    }
                }
            }
            return nums1;
        }

        // 第二种方法 利用上两个数组已经有序的性质 加上 双指针
        var merge = function (nums1, m, nums2, n) {
            let p1 = 0,
                p2 = 0;
            let sorted = new Array(m + n);
            var cur;

            while (p1 < m || p2 < n) {
                // 说明第一个数组遍历完了
                if (p1 === m) {
                    cur = nums2[p2];
                    p2++;
                }
                // 说明第二个数组遍历完了 
                else if (p2 === n) {
                    cur = nums1[p1];
                    p1++;
                } else if (nums1[p1] < nums2[p2]) {
                    cur = nums1[p1];
                    p1++;
                } else {
                    cur = nums2[p2];
                    p2++;
                }

                sorted[p1 + p2 - 1] = cur;
            }

            for (let i = 0; i < m + n; i++) {
                nums1[i] = sorted[i];
            }
        }
        console.log(merge(
            [1, 2, 3, 0, 0, 0], 3, [2, 5, 6], 3
        ));
        console.log(merge([0], 0, [1], 1));
    </script>
</body>

</html>